//
// Created by 74176 on 2022/2/23.
//

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;

const int maxn=1e5+10;
bool visited[maxn];//标记数组
struct status{
    int n;//农夫当前位置
    int cost;//到达某个节点花费时间
    status(){}
    status(int n,int c):n(n),cost(c){}
};
void BFS(int n,int k){//k是奶牛位置，n是农夫位置
    queue<status> myQueue;
    memset(visited, true,sizeof(visited));
    myQueue.push(status(n,0));
    while (!myQueue.empty()){
        status current=myQueue.front();//农夫当前位置
        myQueue.pop();
        if(current.n==k){
            cout<<current.cost<<endl;
            return;
        }
        for(int i=0;i<3;i++){
            status next=current;
            if(i==0)
                next.n--;
            else if(i==1)
                next.n++;
            else if(i==2)
                next.n*=2;
            next.cost++;
            if(0<=next.n&& next.n<=1e5 && visited[next.n]){
                myQueue.push(next);
            }
            visited[current.n]= false;
        }
    }
}
int main(){
    int n,k;
    while(cin>>n>>k){
        BFS(n,k);
    }
    return 0;
}